﻿/* File Created: августа 28, 2012 */
var dicServiceLocalModel = {
    'ActionList': 'vmActionList',
    'PassportList': 'vmPassList',
    'TaskList': 'vmTaskList'
};
//Запросы
var reqAuth = {
    stat: 'local',
    name: 'Auth',
    key: {},
    data: { user: '', pass: '', auto: true, error: '' }
};

var reqActionList = {
    stat: 'local',
    name: 'ActionList',
    key: { user: '', pass: '' },
    data: { engName: 'Шах Денис', engCode: '00001087', actionList: [{ name: 'PassportList', description: 'Passports' }, { name: 'TaskList', description: 'Tasks'}] }
};

var reqPassportList = {
    stat: 'local',
    name: 'PassportList',
    key: { passID: '' },
	data: [ {
                number: '1',
                createArray: [{ date: new Date().toLocaleString(), name: 'Неизвестный' }],
                updateArray: [{ date: new Date().toLocaleString(), name: 'Неизвестный' }],
                description: 'Кладбище',
                square: '1 м.кв.',
                country: 'Тьмутаракань',
                city: 'Тьмутараканово',
                address: 'ул. Тьмутаракана 666',
                saleDepartment: 'Продажный отдел',
                district: '13-й',
                designer: 'Бюро ритуальных услуг',
                profile: 'Кладбище (индивид.)',
                deadline: 'deadline',
                state: 'раскопки',
                isOverhaul: 'ДА',
                isUnderway: 'ДА',
                note: 'стандартный репертуар (Шопен)'
            },
            {
                number: '2',
                createArray: [{ date: new Date().toLocaleString(), name: 'Хеопс' }],
                updateArray: [{ date: new Date().toLocaleString(), name: 'Хеопс' }],
                description: 'Пирамида',
                square: '1000 м.кв.',
                country: 'Египет',
                city: 'Каир',
                address: 'Пустыня',
                saleDepartment: 'Продажный отдел',
                district: '13-й',
                designer: 'Бюро ритуальных услуг',
                profile: 'Пирамида (индивид.)',
                deadline: 'deadline',
                state: 'набор рабов',
                isOverhaul: 'ДА',
                isUnderway: 'ДА',
                note: 'Рядом расположен сфинкс'
            },
            {
                number: '3',
                createArray: [{ date: new Date().toLocaleString(), name: 'Бог' }],
                updateArray: [{ date: new Date().toLocaleString(), name: 'Бог' }],
                description: 'Земля',
                square: '510 072 000 км²',
                country: 'Млечный путь',
                city: 'Солнце',
                address: 'Орбита 3',
                saleDepartment: 'Продажный отдел',
                district: '13-й',
                designer: 'Бог',
                profile: 'Планета (индивид.)',
                deadline: '6-й день',
                state: '1-й день',
                isOverhaul: 'ДА',
                isUnderway: 'ДА',
                note: 'Население: 2 человека'
            }]
};

var reqPassport = {
    stat: 'local',
    name: 'Passport',
    key: { index: 0 },
    data: null
};

var reqGetPicture = {
    stat: 'local',
    name: 'GetPicture',
    key: { passportID: '0' },
    data: { passportID: '0', imageURI: '' }
};

var reqTaskList = {
    name: 'TaskList',
    key: { engCode: '' },
    data: { engCode:'', engName:'', taskList: [new vmTask({ taskID: '1', descr: 'Call' })]}
};

///////////////////////
///     МОДЕЛИ      ///
///////////////////////
//Инициализация
function vmInit() {
    var $this = this;

    $this.tmpl = 'Init';
    $this.key = '';
    $this.data = { progress: 0, isFinished: false };
    $this.model = {
        progress: ko.observable($this.data.progress),
        isFinished: ko.observable($this.data.isFinished)
    }
};
//Авторизация
function vmAuth(data) {
    var $this = this;
    //Имя модели
    $this.tmpl = 'Auth';
    //Ключи для запроса
    $this.key = ['user', 'pass'];
    //Данные
    $this.data = data;
    //Автозаполнения пароля
    $this.getPass = function () { if ($this.data.auto == true) return $this.data.pass; else return ''; };
    //Данные формирующие представление
    $this.model = {
        user: ko.observable($this.data.user),
        auto: ko.observable($this.data.auto),
        pass: ko.observable($this.getPass()),
        error: $this.data.error
    };
    //Функция запроса на представления доступных действий в ЦРМ
    $this.getActionList = function () {
        if (!$this.checkLoginInfo()) {
            return;
        }
        //Сформируем запрос из имени пользователя и пароля
        reqActionList.key = { user: $this.model.user(), pass: $this.model.pass() };
        //Запомнить имя пользователя и пароль, если включена опиция "Запомнить меня"
        if ($this.model.auto()) {
            //Соберем данные для обновления
            reqAuth.data.user = $this.model.user();
            reqAuth.data.pass = $this.model.pass();
        }
        else {
            reqAuth.data.user = '';
            reqAuth.data.pass = '';
        }
        mk.updateRequest(reqAuth);
        mk.doRequest(reqActionList);
    };
    $this.checkLoginInfo = function () {
        /// <summary>
        /// Проверка введенных данных
        /// </summary>
        if ($("#loginForm")) {
            $("#loginForm").validate(
                {
                    rules: {
                        inpUserName: { required: true },
                        inpPassword: { required: true }
                    },
                    messages: {
                        inpUserName: "Username is required",
                        inpPassword: "Password is required"
                    }
                });
            return $("#loginForm").valid();
        }
        return false;
    }
};
//Список действий для сэлза
function vmActionList(data) {
    var $this = this;

    $this.tmpl = 'ActionList';
    $this.key = ['action', 'engCode'];
    $this.data = data;
    $this.model = {
        //Имя инженера
        engCode: $this.data.engCode,
        //Код инженера
        engName: $this.data.engName,
        //Список действий
        actionList: $this.data.actionList
    };
    //Выполнить действие, доступное для данного инженера
    $this.doAction = function () {
        var action = this;
        var request = eval('req'+action.name);
        request.key = { name: action.name, engCode: $this.model.engCode };
        mk.doRequest(request);
    };
}
// Список объектов
function vmPassportList(data) {
    var $this = this;

    $this.tmpl = 'PassportList';
    $this.key = {};
    $this.data = data;
    $this.model = {
        items: ko.observableArray($this.data)
    };

    $this.showPassport = function (data) {
        reqPassport.key = { number: data.number };
        reqPassport.data = data;
        mk.doRequest(reqPassport);
    };
}
// Паспорт объекта
function vmPassport(data) {
    var $this = this;

    $this.tmpl = 'Passport';
    $this.key = {};
    $this.data = data;
    $this.model = {
        // Паспорт объекта
        number: ko.observable($this.data.number),             // номер паспорта
        createArray: ko.observableArray($this.data.createArray),    // массив данных создания паспорта (дата создания, ФИО)
        updateArray: ko.observableArray($this.data.updateArray),    // массив данных изменения паспорта (дата изменения, ФИО)

        // Общая информация
        description: ko.observable($this.data.description),        // наименование объекта
        square: ko.observable($this.data.square),                  // площадь
        country: ko.observable($this.data.country),                // страна
        city: ko.observable($this.data.city),                      // город
        address: ko.observable($this.data.address),                // адрес
        saleDepartment: ko.observable($this.data.saleDepartment),  // отдел продаж
        district: ko.observable($this.data.district),              // округ
        designer: ko.observable($this.data.designer),              // проектировщик
        profile: ko.observable($this.data.profile),                // профиль объекта
        deadline: ko.observable($this.data.deadline),              // срок сдачи
        state: ko.observable($this.data.state),                    // стадия
        isOverhaul: ko.observable($this.data.isOverhaul),          // капремонт
        isUnderway: ko.observable($this.data.isUnderway),          // в работе

        // Примечание
        note: ko.observable($this.data.note)  // примечание

        // Инженерное наполнение

        // Участники проекта

        // Отслеживание

        // Счета / Заказы

        // Файлы

        // Привязки
    };
    $this.getPicture = function (model) {
        reqGetPicture.key = { passportID: model.data.number };
        reqGetPicture.data = {
            passportID: model.data.number,
            imageURI: '',
            uploadURI: ''
        };
        mk.doRequest(reqGetPicture);
    };
}
// Список задач
function vmTaskList(data) {
    var $this = this;

    $this.tmpl = 'TaskList';
    $this.key = {};
    $this.data = data;
    $this.model = {
        engName : data.engName,
        taskList: ko.observableArray($this.data)
    };
}
// Задача
function vmTask(data) {
    var $this = this;

    $this.tmpl = 'Task';
    $this.key = ['taskId'];
    $this.data = data;
    $this.model = {
        id : $this.data.taskID,
        descr : $this.data.descr
    };
}
// Картинка
function vmGetPicture(data) {
    var $this = this;

    $this.tmpl = 'GetPicture';
    $this.key = ['passportID'];
    $this.data = data;
    $this.model = {
        passportID: ko.observable($this.data.passportID),
        imageURI: ko.observable($this.data.imageURI),
    };
    // Called when a photo is successfully retrieved
    //
    function onPhotoDataSuccess(data) {
        // Uncomment to view the base64 encoded image data
        // console.log(data);

        $this.model.imageURI("data:image/jpeg;base64," + data);
    };
    // Called when a photo is successfully retrieved
    //
    function onPhotoURISuccess(uri) {
        // Uncomment to view the image file URI 
        // console.log(uri);

        $this.model.imageURI(uri);
    };
    $this.capturePhoto = function () {
    	if (!cameraManager) {
            return;
        }

        cameraManager.capturePhoto(onPhotoURISuccess);
    };
    $this.capturePhotoData = function () {
        if (!cameraManager) {
            return;
        }

        cameraManager.capturePhotoEdit(onPhotoDataSuccess);
    };
    $this.getPhotoFromLibrary = function () {
        if (!cameraManager) {
            return;
        }

        cameraManager.getPhoto(cameraManager.pictureSource.PHOTOLIBRARY, onPhotoURISuccess);
    };
    $this.getPhotoFromAlbum = function () {
        if (!cameraManager) {
            return;
        }

        cameraManager.getPhoto(cameraManager.pictureSource.SAVEDPHOTOALBUM, onPhotoURISuccess);
    };
    $this.uploadPhoto = function () {
        if (!uploadManager) {
            return;
        }

        uploadManager.uploadPhoto($this.model.imageURI());
    };
}
